package com.cong.cojcodesandbox.docker;

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.*;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.Frame;
import com.github.dockerjava.api.model.PullResponseItem;
import com.github.dockerjava.core.DockerClientBuilder;
import com.github.dockerjava.core.command.LogContainerResultCallback;

import java.util.List;

/**
 * @author 86188
 * @date 2023/10/06
 */
public class DockerDemo {
    public static void main(String[] args) throws InterruptedException {
        //获取默认的dockerClient
        DockerClient dockerClient = DockerClientBuilder.getInstance().build();
        String img = "nginx:latest";
//        PullImageCmd pullImageCmd = dockerClient.pullImageCmd(img);
//        PullImageResultCallback pullImageResultCallback = new PullImageResultCallback() {
//            @Override
//            public void onNext(PullResponseItem item) {
//                System.out.println("下载镜像："+ item.getStatus());
//                super.onNext(item);
//            }
//        };
//        pullImageCmd.exec(pullImageResultCallback).awaitCompletion();
//        System.out.println("下载完成");
        //创建容器
        CreateContainerCmd containerCmd = dockerClient.createContainerCmd(img);
        CreateContainerResponse exec = containerCmd.withCmd("echo","Hello Docker").exec();
        System.out.println(exec);
        String containerId = exec.getId();
        //查看容器状态
        ListContainersCmd listContainersCmd = dockerClient.listContainersCmd();
        List<Container> containerList = listContainersCmd.withShowAll(true).exec();
        for (Container container : containerList) {
            System.out.println(container);
        }
        //启动容器
        dockerClient.stopContainerCmd(containerId).exec();
        //查看日志
        LogContainerResultCallback logContainerResultCallback = new LogContainerResultCallback(){

            @Override
            public void onNext(Frame item) {
                System.out.println("日志："+ new String(item.getPayload()));
                super.onNext(item);
            }
        };
        dockerClient.logContainerCmd(containerId).exec(logContainerResultCallback).awaitCompletion();
        //删除容器 强制删除
        dockerClient.removeContainerCmd(containerId).withForce(true).exec();
        //删除镜像
        dockerClient.removeImageCmd(img).exec();
    }
}
